import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import junit.framework.TestCase;

import org.junit.Before;
import org.junit.Test;

public class TesteLivro extends TestCase {

	Livro livro, tese, Dissertacao;
	String data;
	
	
	@Before
	public void setUp() throws Exception {
		livro = new Livro("Java", "Luiz", "Livro", "1234567890123");
		data = "01/02/2008";
	}
	
	@Test
	public void testLivro() throws Exception {

		Livro livro1 = new Livro("Core", "Livro");
		assertEquals("Erro construtor 1", "Core, Livro", livro1.getTitulo() + ", " + livro1.getTipo());
		tese = new Livro("Quantica", "Alexandre", "Tese");
		assertEquals("Erro construtor 1", "Quantica, Tese", tese.getTitulo() + ", " + tese.getTipo());
		Dissertacao = new Livro("Caos", "Rodrigo", "Dissertacao");
		assertEquals("Erro construtor 1", "Caos, Dissertacao", Dissertacao.getTitulo() + ", " + Dissertacao.getTipo());
		
		try {
			Livro livro2 = new Livro("Rede", "");
			Livro livro3 = new Livro("", "");
			fail("Esperava-se uma excecao de titulo ou tipo em branco");
		} catch (Exception e) {
			assertEquals("Erro no Titulo ou Tipo", "Titulo ou Tipo em branco", e.getMessage());
		}
		
		try {
			Livro livro4 = new Livro("Rede", null);
			Livro livro5 = new Livro(null, null);
			fail("Esperava-se uma excecao de titulo ou tipo nulo");
		} catch (Exception e) {
			assertEquals("Erro no Titulo ou Tipo", "Titulo ou Tipo nulo", e.getMessage());
		}
		
		try {
			Livro livro6 = new Livro("Java", "Revista");
			Livro livro7 = new Livro("Rede", "Periodico");
			fail("Esperava-se uma excecao de tipo diferente");
		} catch (Exception e) {
			assertEquals("Erro no Tipo", "Tipo diferente", e.getMessage());
		}
		livro = null;
	}
	
	@Test
	public void testGetTitulo() {
		assertEquals("get titulo com erro", "Java", livro.getTitulo());
		livro = null;
	}
	
	@Test
	public void testSetTitulo() {
		livro.setTitulo("Pascal");
		assertEquals("set titulo com erro", "Pascal", livro.getTitulo());
		livro = null;
	}
	
	@Test
	public void testGetAutor() {
		assertEquals("get autor com erro", "Luiz", livro.getAutor());
		livro = null;
	}
	
	@Test
	public void testSetAutor() {
		livro.setAutor("Joao");
		assertEquals("set autor com erro", "Joao", livro.getAutor());
		livro = null;
	}
	
	@Test
	public void testGetTipo() {
		assertEquals("get tipo com erro", "Livro", livro.getTipo());
		livro = null;
	}
	
	@Test
	public void testSetTipo() {
		livro.setTipo("Tese");
		assertEquals("set tipo com erro", "Tese", livro.getTipo());
		livro = null;
	}
	
	@Test
	public void testGetISBN() {
		assertEquals("get isbn com erro", "1234567890123", livro.getISBN());
		livro = null;
	}
	
	@Test
	public void testSetISBN() {
		livro.setISBN("3210987654321");
		assertEquals("set isbn com erro", "3210987654321", livro.getISBN());
		livro = null;
	}
	
	@Test
	public void testGetUltimoUsuario() {
		assertEquals("get ultimoUsuario com erro", null, livro.getUltimoUsuario());
		livro = null;
	}
	
	@Test
	public void testSetUltimoUsuario() throws Exception {
		Usuario usuario = new Aluno("Aluno");
		livro.setUltimoUsuario(usuario);
		assertEquals("set ultimoUsuario com erro", usuario, livro.getUltimoUsuario());
		livro = null;
	}
	
	@Test
	public void testGetDataEmprestimo() {
		assertEquals("get dataEmprestimo com erro", "", livro.getDataEmprestimo());
		livro = null;
	}
	
	@Test
	public void testSetDataEmprestimo() throws ParseException {
		livro.setDataEmprestimo(data);
		assertEquals("set dataEmprestimo com erro", "01/02/2008", livro.getDataEmprestimo());
		livro = null;
	}
	
	@Test
	public void testGetStatus() {
		assertEquals("get disponibilidade com erro", true, livro.getStatus());
		livro = null;
	}
	
	@Test
	public void testSetStatus() {
		livro.SetStatus(false);
		assertEquals("set disponibilidade com erro", false, livro.getStatus());
		livro = null;
	}
}
